package com.qfedu.service.impl;

import com.qfedu.pojo.req.Cart;
import com.qfedu.pojo.req.CartItem;
import com.qfedu.pojo.resp.BaseResp;
import com.qfedu.service.CartService;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpSession;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @author:User
 * @time:2022/9/28
 * @explain:
 */

@Service
public class CartServiceImpl implements CartService {


    /**
     * 获取购物车
     * @param session
     * @return
     */
    @Override
    public BaseResp getCart(HttpSession session) {
        //先从session域中获取购物车
        Cart cart = (Cart) session.getAttribute("cart");
        //判断是否有购物车,
        if (cart != null) {
            BaseResp success = new BaseResp(1, "SUCCESS", cart, null);
            return success;
        } else {
            //如果没有创建一个购物车并放在session域中
            cart = new Cart();
            session.setAttribute("cart", cart);
            BaseResp success = new BaseResp(1, "SUCCESS", cart, null);
            return success;
        }
    }

    /**
     * 添加购物项
     * @param cartItem
     * @param session
     * @return
     */
    @Override
    public BaseResp addCartItem(CartItem cartItem, HttpSession session) {

        //获取session域中的购物车
        BaseResp cart1 = getCart(session);
        Cart cart =(Cart) cart1.getData();

        //判断cartItemMap是否为空
        if (cart.getCartItemMap() != null) {
            //不为空遍历查询购物车中的商品项
            Map<String, CartItem> cartItemMap = cart.getCartItemMap();
            //判断是否重复
            if (cartItem.getGoodsname().equals(cartItemMap.get(cartItem.getGoodsname()))) {
                //如果重复商品数量加一,商品项价格增加一个单价
                cartItemMap.get(cartItem.getGoodsname()).setCount(cartItemMap.get(cartItem.getGoodsname()).getCount() + 1);
                cartItemMap.get(cartItem.getGoodsname()).setTotalMoney(cartItemMap.get(cartItem.getGoodsname()).getTotalMoney() + cartItem.getGoodsInfo().getGoodsPrice());
                //总价加上一个商品单价
                cart.setTotalMoney(cart.getTotalMoney() + cartItem.getGoodsInfo().getGoodsPrice());
                session.setAttribute("cart",cart);

                return new BaseResp(1,"SUCCESS",cart,null);
            } else {
                //不为空添加一个商品添加到map集合中总价加上一个商品单价
                cartItemMap.put(cartItem.getGoodsname(), cartItem);
                cart.setTotalMoney(cart.getTotalMoney() + cartItem.getGoodsInfo().getGoodsPrice());
                session.setAttribute("cart",cart);
                return new BaseResp(1,"SUCCESS",cart,null);
            }
        } else{

        //为空直接添加商品项到map集合中总价加上一个商品单价
            cart.getCartItemMap().put(cartItem.getGoodsname(), cartItem);
            cart.setTotalMoney(cart.getTotalMoney() + cartItem.getGoodsInfo().getGoodsPrice());
            session.setAttribute("cart",cart);
            return new BaseResp(1,"SUCCESS",cart,null);

    }
}

    /**
     * 删除购物项
     * @param cartItem
     * @param session
     * @return
     */
    @Override
    public BaseResp delCartItem(CartItem cartItem,HttpSession session) {
        //获取session域中的购物车
        BaseResp cart1 = getCart(session);
        Cart cart =(Cart) cart1.getData();
        //通过商品名删除货物然后女减去该项商品总价
        cart.getCartItemMap().remove(cartItem.getGoodsname());
        cart.setTotalMoney(cart.getTotalMoney()-cartItem.getTotalMoney());
        session.setAttribute("cart",cart);
        return new BaseResp(1,"SUCCESS",cart,null);
    }

    /**
     * 清空购物车
     * @param session
     * @return
     */
    @Override
    public BaseResp cleanCartItem(HttpSession session) {
        //获取session域中的购物车
        BaseResp cart1 = getCart(session);
        Cart cart =(Cart) cart1.getData();
        //清空商品清空价格
        cart.setCartItemMap(null);
        cart.setTotalMoney(0.00);
        session.setAttribute("cart",cart);
        return new BaseResp(1,"SUCCESS",cart,null);
    }


}
